#include<SDL/SDL.h>
#include<SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>
#include<time.h>

#include "CASE.h"
#include "CARTE.h"
#include "DE.h"
#include "PION.h"
#include "JEU.h"


/**
@struct SDLJEU
@brief contient les informations nécessaires pour le déroulement du jeu SDL
*/
typedef struct {
    /** Jeu utilisé */
    JEU jeu;
    /** Surface utilisée pour afficher le Menu */
    SDL_Surface* surface_Menu;
    /** Surface utilisée pour afficher la saisie des joueurs dans le menu */
    SDL_Surface* surface_MenuJoueur;
    /** Surface utilisée pour afficher l'image du plateau */
    SDL_Surface* surface_PlateauFinal;
    /** Surface utilisée pour afficher le logo du jeu */
    SDL_Surface* surface_LogoFacopoly;
    /** Surfaces utilisées pour afficher les 12 cartes MAIL */
    SDL_Surface* surface_Mcar1;
    SDL_Surface* surface_Mcar2;
    SDL_Surface* surface_Mcar3;
    SDL_Surface* surface_Mcar4;
    SDL_Surface* surface_Mcar5;
    SDL_Surface* surface_Mcar6;
    SDL_Surface* surface_Mcar7;
    SDL_Surface* surface_Mcar8;
    /** Surfaces utilisées pour afficher les 12 cartes REFERENT PEFAGOGIQUE */
    SDL_Surface* surface_RPcar1;
    SDL_Surface* surface_RPcar2;
    SDL_Surface* surface_RPcar3;
    SDL_Surface* surface_RPcar4;
    SDL_Surface* surface_RPcar5;
    /** Surfaces utilisées pour les pions */
    SDL_Surface* pion1;
    /** Surface utilisée pour l'écran */
    SDL_Surface* ecran;
    /** Surface utilisée pour les règles */
    SDL_Surface* surface_regle1;
    SDL_Surface* surface_regle2;
    /** Surface utilisée pour les pions */
    SDL_Surface* surface_1;
    SDL_Surface* surface_2;
    SDL_Surface* surface_3;
    SDL_Surface* surface_4;
    /** Surface utilisée pour les points */
    SDL_Surface* score1;
	SDL_Surface* score2;
	SDL_Surface* score3;
	SDL_Surface* score4;
    /** Surface utilisée pour les des */
    SDL_Surface* de;
} SDLJEU;

/** @brief affiche_plateau procedure SDL qui permet l'affichage du tableau avec l'image de fond
    @param ecran une surface SDL en mode video
    @param plateau le tableau d'elements initialise
*/
    int affiche_plateau (SDL_Surface *ecran);

/**
    @brief initialise le jeu en sdl
    @param [in,out] pSdlJeu
*/
void sdljeuInit(SDLJEU *pSdlJeu);

/** @brief affiche_plateau procedure SDL qui permet l'affichage d'une carte
    @param [in,out] pSdlJeu
*/
void sdlAff_Carte(SDLJEU *pSdlJeu);

/** @brief affiche_plateau procedure SDL qui permet l'affichage du pion 1
    @param [in,out] pSdlJeu
*/
void sdlAff_1(SDLJEU *pSdlJeu);

/** @brief affiche_plateau procedure SDL qui permet l'affichage du pion 2
    @param [in,out] pSdlJeu
*/
void sdlAff_2(SDLJEU *pSdlJeu);

/** @brief affiche_plateau procedure SDL qui permet l'affichage du pion 3
    @param [in,out] pSdlJeu
*/
void sdlAff_3(SDLJEU *pSdlJeu);

/** @brief affiche_plateau procedure SDL qui permet l'affichage du pion 4
    @param [in,out] pSdlJeu
*/
void sdlAff_4(SDLJEU *pSdlJeu);

/** @brief affiche_plateau procedure SDL qui permet l'affichage du score
    @param [in,out] pSdlJeu
*/
void sdlAff_Score(SDLJEU *pSdlJeu);

/** @brief affiche_plateau procedure SDL qui permet l'affichage le chiffre donner par les dé
    @param [in,out] pSdlJeu
*/
void sdlAff_De(SDLJEU *pSdlJeu);

/**
    @brief affiche le jeu en sdl
    @param [in,out] pSdlJeu
*/
void sdljeuAff(SDLJEU *pSdlJeu);

/**
    @brief boucle qui traite tous les cas d'action du jeu
    @param [in,out] pSdlJeu
*/
void sdljeuBoucle(SDLJEU * pSdlJeu);

int SDLinterface(SDLJEU *pSdlJeu);
